home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 014 / qf23d.arc / QF23.PAT < prev    next >
Text File  |  1986-11-08  |  3KB  |  66 lines

  1. N QFILER.COM
  2. L
  3. A 33A8
  4. Mov  AH,3               ;Get current cursor pos. to save it
  5. Int  10
  6. Push DX                 ;Save cursor pos. on stack
  7. Mov  CL,[BP+4]          ;CL = string length
  8. Xor  CH,CH              ;CH = 0, to set CX to string length
  9. Xor  SI,SI              ;SI = 0
  10. And  CL,CL              ;If null string, jump to end, do nothing
  11. Jz   33F1
  12. Push CX                 ;Save chars left to write on stack             [33B8:]
  13. Inc  SI                 ;Incr pointer to char in string
  14. Mov  DH,[BP+57]         ;Screen row
  15. Mov  DL,[BP+59]         ;Screen column
  16. Inc  Byte Ptr [BP+59]   ;Incr. column position
  17. Xor  BH,BH              ;Display page 0 (BH=0)
  18. Mov  AH,2               ;Set cursor position
  19. Int  10
  20. Mov  CX,1               ;CX = count of characters to write, will be >= 1
  21. Xor  BH,BH              ;Display page 0
  22. Mov  BL,[BP+55]         ;Get attribute
  23. Mov  AL,[BP+SI+4]       ;Get next character to write
  24. Mov  AH,9               ;Func 9 of int 10 = write char & attrib at cursor pos.
  25. Cmp  AL,[BP+SI+5]       ;See if next char is exactly the same          [33D6:]
  26. Jnz  33EC               ;If not, write this character
  27. Pop  DX                 ;Pop char's left in string
  28. Cmp  DX,1               ;See if this is the last one
  29. Push DX                 ;Put back
  30. Jz   33EC               ;If last char, also go ahead and write the char
  31. Pop  DX                 ;Next char is same as this one, so...
  32. Dec  DX                 ;Decrement char's left counter
  33. Push DX
  34. Inc  SI                 ;Incr. position
  35. Inc  CX                 ;Incr # of chars we want BIOS to write
  36. Inc  Byte Ptr [BP+59]   ;Incr column to write at
  37. Jmp  33D6               ;Loop to see if next char is also identical
  38. Int  10                 ;Write CX copies of char and attrib            [33EC:]
  39. Pop  CX                 ;Get # of chars left
  40. Loop 33B8               ;Loop if more to do
  41. Pop  DX                 ;Get back original cursor position             [33F1:]
  42. Xor  BH,BH              ;Display page 0
  43. Mov  AH,2               ;Set cursor position function
  44. Int  10
  45. Jmp  3413               ;Jump to original end of FastWrite code        [33F8:]
  46.  
  47. W
  48. Q
  49.  
  50.  
  51. This file contains a patch for QFiler 2.3 to route all text writing
  52. through BIOS calls rather than direct writing to RAM.  It is significantly
  53. faster than an ordinary writeln for strings of repeated characters, though,
  54. because it checks for repeated characters, and if found, it will write them
  55. all with one BIOS call, requesting the appropriate number of copies.
  56. It is, of course, painfully slow, but it is even slower without this
  57. feature.
  58. This patch does NOT alter the full-screen saves and restores that QFiler does,
  59. for example when you press 'H' for help, but the screen can be restored by
  60. pressing Alt-R, so I didn't bother.
  61.  
  62. The starting address of the original FastWrite code can be found with
  63. debug with:   S 100 FFFE 1E 1E 8A 86 57 00
  64.  
  65. To use, type something like:
  66. Debug < QF23.PAT